package com.tan.user.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.tan.common.domain.user.SysMenu;
import com.tan.common.dto.user.MenuCreateDTO;
import com.tan.common.dto.user.MenuUpdateDTO;
import com.tan.common.query.user.MenuQuery;
import com.tan.common.vo.Option;
import com.tan.common.vo.user.MenuVO;
import com.tan.common.vo.user.RouteVO;

import java.util.List;
import java.util.Set;

/**
 * <p>
 * 菜单管理 服务类
 * </p>
 *
 * @author Tan
 * @since 2025-01-27
 */
public interface ISysMenuService extends IService<SysMenu> {

    /***
     * @author Tan-Bowen
     * @description 菜单分页
     * @date 2025/2/18 16:35
     * @param [query]
     */
    IPage<MenuVO> menuPages(MenuQuery query);

    /**
     * 菜单下拉
     * @return
     */
    List<Option> menuOptions();

    /***
     * @author Tan-Bowen
     * @description 创建
     * @date 2025/2/18 16:35
     * @param [menuCreateDTO]
     */
    void createMenu(MenuCreateDTO menuCreateDTO);

    /**
     * @param [menuUpdateDTO]
     * @author Tan-Bowen
     * @description 修改
     * @date 2025/2/18 16:35
     */
    void updateMenu(MenuUpdateDTO menuUpdateDTO);

    /**
     * @param [menuId]
     * @author Tan-Bowen
     * @description 删除菜单
     * @date 2025/2/20 15:35
     */
    void delMenu(Long menuId);

    /**
     * 获取所有菜单
     *
     * @return 菜单
     */
    List<SysMenu> allMenus();

    /***
     * @author Tan-Bowen
     * @description 指定所有菜单
     * @date 2025/2/17 16:06
     * @param [ids]
     */
    List<SysMenu> allMenus(Set<Long> ids);

    /***
     * @author Tan-Bowen
     * @description 当前用户的菜单
     * @date 2025/2/17 16:32
     * @param []
     */
    List<SysMenu> loginUserMenus();

    /**
     * @param []
     * @author Tan-Bowen
     * @description 用户路由
     * @date 2025/2/17 16:06
     */
    List<RouteVO> listRoutes();

    /**
     * @param [menuId]
     * @author Tan-Bowen
     * @description 清除菜单相关缓存
     * @date 2025/2/20 15:42
     */
    void clearMenuCache(Long menuId);
}
